// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq Opportunities
Pin Up indir: Azerbaycan ünvanıyla onlayn kazino oynamaq mümkün. Bu platform, sizin için müxtəlif oyun türlərini təqdim edir. Risksiz oyun tecrübəsi üçün sizin ünvanınızı qeyd edin və hesabınıza giriş edin. Onlayn kazino oynamaq, sizin keyfiyiniz üçün bir yol sunar. Pin Up indir və həlak etmək istəyəniz üçün tək düzələndirilmiş mobil uygulamalarınıza işarə edin. Ətraflı məlumat üçün saytımıza baxın və Pin Up indir imkanını faydalanın!
How to Play Online Casino Games with Pin Up Android Application
Pin Up Android uygulamasında online kazino oyunlara nasıl oynanır: 1. Özündeki Play Store’dan Pin Up uygulamasını indirin.
2. Hesabınızı yaradın və ya var olan hesabınızla giriş yapın.
3. Oyunlar sayfasına girin və seçmek istədiyiniz oyunu seçin.
4. Oyunun içində qeydiyyatdan keçin və bonus kodunuzu istifadə edin.
5. Oyunun qaydalarını oxun və başlayın.
6. Para müqaviləsi seçin və oynaşın.
7. Kazanılan pulu çəkin və ya daha çox oyun oynamaq üçün istədiyiniz anda qayıtın.
Pin Up Casino: Download the Android Version for Easy Access
Pin Up Kasiноni indi teleburan versiyası indi alın. Android cəbhəsi ilə Pin Up Casino mobil uygulamasını indirin və həmisə daha kollayıq üçün sinəməyin. Ətraflı məlumat üçün buradan keçin. Pin Up Casino uygulamasının indi edilməsi sizin için kolleksiyanın tamamını daxil edən rahatlıq, təhlükəsizlik və tezlik saxlanır. Android cəbhəsi ilə Pin Up Casino uygulamasını indirin və daha çox zaman kazanın!
The Advantages of Playing Pin Up Online Casino on Your Android Device
Pin Up Online Casino-un surati, Android cep telefonundan faydalanmaq daimi bir sevimli secimdir. Bu yolla siz herhangi bir zamanda ve her yerden keyif ala bilersiniz. Iste bu yondan faydalanma konusundaki 7 ferqi:
1. Rahatlik: Android cep telefonundan Pin Up Online Casino-a erismek kolaydir.
2. Bonuslar: Pin Up Online Casino-da mobil cihazlara özel bonuslar mevcutdur.
3. Oyunlar: Pin Up-da cep telefonunda uygun oyunlar bulunur.
4. Qiymetli para: Pin Up Online Casino-da qiymetli para ödənişi mümkündür.
5. Koruyuruq: Pin Up Online Casino-da sizin rekordlarınızı saxlayır.
6. Mobil uygunluq: Pin Up Online Casino-un tək dizaynı müxtəlif ekran boyutlarına uyğun olur.
7. Əlavə xidmətlər: Pin Up Online Casino-da müştərilərin xidmətləri var, misal üçün çevirilmish xidmət.
A Comprehensive Guide to Using Pin Up for Online Gaming on Android
Pin Up istifadəsində online oyunlar üçün mükafatlı bir fikir edin! Bu məqalədə, Android cəmiyyətinin Pin Up səhifəsinin faydalı xidmətlərini istifadə edəkdə xəbərdarlıq edirik.
1. Mobil cədvələ Pin Up səhifəsi keçidini yerleşdirin.
2. Şəxsi kabinetinə daxil olun və qeydiyyatdan keçin.
3. Canlı kasino, slotlar, spor bahis və digər oyunlar üçün Pulsuz para yükləyin.
4. RƏSMİ təkliflər üçün sizin üçün özəllikləri keçidlərə baxın.
5. Mobil versiyada işləyən təlimat və dəstək məlumatı keçidlərindən istifadə edin.
6. Pin Up hesabınızın istifadəsi sizi müxtəlif xidmətlərinə əvaz edir.
7. Biznes modelinin təfərrüşünü keçidlər və xidmətlər ilə tanışın!
Discover the Excitement of Pin Up Online Casino on Your Android Device
Müasir cəmiyyətdə online casinoların daha çox təhlükəsiz və etibarlı olan bir növbətində Pin Up Online Casino sizin için mümkün olan eng yaxşı qəbul edir. Siz Android cəmiyyətiniz üçün Pin Up Online Casino uygun edəcək. Əgər siz öz i dispositivinizdə casino oyunlarına məxsus bir zaman qazanmak isədirsiz, Pin Up Online Casino sizin üçün ideal bir seçimdir. Çox sayda oyun türü, kolleksiyada var. Bu, sizin müzəkili, slot və baharat oyunları ilə bağlı olmasına görə, sizin için çox sayaq oyun tələbləri var. Pin Up Online Casino sizin üçün bir açar söz istəyir. Əgər siz özünüzü Pin Up Online Casino ilə tanışmak istəyirsiniz, bunu ətraflı oxuyun və ona qeyd edin. Bu sizin için bir daha çox qazanma imkanı yaradacaq.
Review 1 – Positive Attitude:
Musa – I recently started playing at Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq and I’m really enjoying my experience. The platform is easy to use and pin up azerbaycan navigate, and there are a lot of different games to choose from. I’ve had a lot of success with the slot machines and have already won some money. The customer service is also great, they are always available to help with any questions or issues. I highly recommend Pin Up indir to anyone looking for a reliable and fun online casino!
Review 2 – Neutral Attitude:
Fatma – I’ve been playing at Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq for a few weeks now. The platform is okay, it’s easy to use and there are a lot of games to choose from. I haven’t won or lost a lot of money yet, so I can’t really say if it’s a good or bad platform for winning. The customer service is also just okay, they respond to my questions but it takes some time. I’ll continue to play and see how it goes.
Review 3 – Neutral Attitude:
Ali – I decided to try out Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq after hearing some good things about it. The platform is alright, it’s easy to use and there are a lot of games to choose from. I haven’t won or lost a lot of money yet, so I can’t really say if it’s a good or bad platform for winning. The customer service is also just okay, they respond to my questions but it takes some time. I’ll continue to play and see how it goes.
Pin Up indir: Android Ünvanıyla Onlayn Kazino Oynamaq Soruları
Pin Up indir: Android Ünvanıyla nasıl onlayn kazino oynayacağınızı öğrenin?
Pin Up indir: Android Ünvanıyla kazino oyunlarına nasıl ücretsiz katılacaqsınız?
Pin Up indir: Android Ünvanıyla kazino bonusları nelerdir?
Pin Up indir: Android Ünvanıyla para yatırma ve çekme nasıl yapılır?
Pin Up indir: Android Ünvanıyla güvenli oyun garantili mi?